/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package caintra.Sapra.Pantalla.Direccion;

import caintra.Sapra.ComponentsImplements.BotonCaintra;
import caintra.Sapra.ComponentsImplements.LabelCaintra;
import caintra.Sapra.ComponentsImplements.SelectFieldCaintra;
import caintra.Sapra.ComponentsImplements.TextFieldCaintra;
import java.util.List;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.list.DefaultListModel;
import org.sapra.dao.Colonia;
import org.sapra.dao.Direccion;
import org.sapra.dao.Estado;
import org.sapra.dao.Pais;
import org.sapra.dao.Poblacion;

/**
 *
 * @author luiz
 */
public class DireccionView{
    
    public SelectFieldCaintra sel_pais,sel_estado,sel_ciudad,sel_colonia;
    public LabelCaintra lb_pais,lb_estado,lb_ciudad,lb_colonia,lb_cod_post;
    public  TextFieldCaintra txt_pais,txt_estado,txt_ciudad,txt_colonia, txt_cod_postal_add;
    public Column col_supreme,col_pais,col_calle;
    public Row cp_add;
    
    public LabelCaintra lb_codpostal,lb_calle,lb_numint,lb_numext;
    public TextFieldCaintra txt_codpostal,txt_calle,txt_numint,txt_numext;
            
    public BotonCaintra pais_add,estado_add,ciudad_add,colonia_add;
    public BotonCaintra pais_save,estado_save,ciudad_save,colonia_save;
    
    public List<Pais> paises;
    public List<Estado> estados;
    public List<Poblacion> poblaciones;
    public List<Colonia> colonias;
    
    public Pais pais;
    public Estado estado;
    public Poblacion poblacion;
    public Colonia colonia;
    public Direccion direccion;
    public DireccionQuery query;
    
    public DireccionView(){
        initComponents();
        design_sheet();
        setListener();
        query=new DireccionQuery();
        setData();
    
    }
    public void initComponents(){
        col_supreme=new Column();
        col_pais=new Column();
        col_calle=new Column();
        
        lb_calle = new LabelCaintra("Calle :", Color.BLACK);
        lb_codpostal = new LabelCaintra("Codigo Postal :", Color.BLACK);
        lb_numint = new LabelCaintra("Num. Interior :", Color.BLACK);
        lb_numext = new LabelCaintra("Num. Exterior :", Color.BLACK);
        
        txt_calle=new TextFieldCaintra(400, 120);txt_calle.setAlignment(Alignment.ALIGN_LEFT);
        txt_codpostal=new TextFieldCaintra(80, 8);txt_codpostal.setEnabled(false);txt_codpostal.setAlignment(Alignment.ALIGN_LEFT);
        txt_numext=new TextFieldCaintra(150, 10);txt_numext.setAlignment(Alignment.ALIGN_LEFT);
        txt_numint=new TextFieldCaintra(150, 10);txt_numint.setAlignment(Alignment.ALIGN_LEFT);
        
        lb_pais = new LabelCaintra("Pais :", Color.BLACK);
        sel_pais=new SelectFieldCaintra("sel_pais", 200);
        pais_add=new BotonCaintra("agregar.png", "pais_add");
        txt_pais=new TextFieldCaintra(200, 30); 
        pais_save=new BotonCaintra("save2.png", "pais_save");//pais_save.setVisible(false);txt_pais.setVisible(false);
        
        lb_estado = new LabelCaintra("Estado :", Color.BLACK);
        sel_estado=new SelectFieldCaintra("sel_estado", 200);
        estado_add=new BotonCaintra("agregar.png", "estado_add");
        txt_estado=new TextFieldCaintra(200, 30);
        estado_save=new BotonCaintra("save2.png", "estado_save");//estado_save.setVisible(false);txt_estado.setVisible(false);
        
        lb_ciudad = new LabelCaintra("Ciudad :", Color.BLACK);
        sel_ciudad = new SelectFieldCaintra("sel_ciudad", 200);
        ciudad_add=new BotonCaintra("agregar.png", "ciudad_add");
        txt_ciudad=new TextFieldCaintra(200, 30);
        ciudad_save=new BotonCaintra("save2.png", "ciudad_save");//ciudad_save.setVisible(false);txt_ciudad.setVisible(false);
        
        lb_colonia = new LabelCaintra("Colonia :", Color.BLACK);
        sel_colonia = new SelectFieldCaintra("sel_colonia", 200);
        colonia_add=new BotonCaintra("agregar.png", "colonia_add");
        txt_colonia=new TextFieldCaintra(200, 30);
        colonia_save=new BotonCaintra("save2.png", "colonia_save");//ciudad_save.setVisible(false);txt_ciudad.setVisible(false);
    }
    public void design_sheet(){
        
        
        Row row1=new Row();
        row1.add(lb_pais);
        row1.add(sel_pais);
        row1.add(pais_add);pais_add.setVisible(false);
        row1.add(txt_pais);txt_pais.setVisible(false);
        row1.add(pais_save);pais_save.setVisible(false);
        
        
        Row row2=new Row();
        row2.add(lb_estado);
        row2.add(sel_estado);
        row2.add(estado_add);estado_add.setVisible(false);
        row2.add(txt_estado);txt_estado.setVisible(false);
        row2.add(estado_save);estado_save.setVisible(false);

        
        Row row3=new Row();
        row3.add(lb_ciudad);
        row3.add(sel_ciudad);
        row3.add(ciudad_add);ciudad_add.setVisible(false);
        row3.add(txt_ciudad);txt_ciudad.setVisible(false);
        row3.add(ciudad_save);ciudad_save.setVisible(false);

        
        Row row4=new Row();
        row4.add(lb_colonia);
        row4.add(sel_colonia);
        row4.add(colonia_add);colonia_add.setVisible(false);
        row4.add(txt_colonia);txt_colonia.setVisible(false);
        row4.add(colonia_save);colonia_save.setVisible(false);

        
        Row row5=new Row();
        row5.add(lb_calle);
        row5.add(txt_calle);
        row5.add(lb_codpostal);
        row5.add(txt_codpostal);
        
        Row row6=new Row();
        row6.add(lb_numint);
        row6.add(txt_numint);
        row6.add(lb_numext);
        row6.add(txt_numext);
        
        col_calle.add(row5);
        col_calle.add(row6);col_calle.setCellSpacing(new Extent(10));
        
        
        col_pais.add(row1);
        col_pais.add(row2);
        col_pais.add(row3);
        col_pais.add(row4);col_pais.setCellSpacing(new Extent(10));
        
        col_supreme.add(col_pais);
        col_pais.add(col_calle);
    }
    public void setListener(){
        action();
        /*
            pais_add.addActionListener(this);
            estado_add.addActionListener(this);
            ciudad_add.addActionListener(this);
            colonia_add.addActionListener(this);
            pais_save.addActionListener(this);
            estado_save.addActionListener(this);
            ciudad_save.addActionListener(this);
            colonia_save.addActionListener(this);
            sel_pais.addActionListener(this);
            sel_estado.addActionListener(this);
            sel_ciudad.addActionListener(this);
            sel_colonia.addActionListener(this);*/
         
    }
    public void setData(){
        try {
             paises=query.paises();
                if(paises == null || paises.isEmpty()){
                      sel_pais.setModel(new DefaultListModel());      
                      sel_estado.setModel(new DefaultListModel());
                }else{
                    sel_pais.setModel(new DefaultListModel(paises.toArray()));
                    sel_pais.setSelectedIndex(0);
                    estados=query.estados(paises.get(0));
                    if(estados == null || estados.isEmpty()){
                            sel_estado.setModel(new DefaultListModel());
                    }else{
                            sel_estado.setModel(new DefaultListModel(estados.toArray()));
                    }
                }
                sel_ciudad.setModel(new DefaultListModel());
                sel_colonia.setModel(new DefaultListModel());
                sel_estado.setSelectedIndex(-1);
                sel_ciudad.setSelectedIndex(-1);
                sel_colonia.setSelectedIndex(-1);
                
                txt_calle.setText("");
            txt_codpostal.setText("");
            txt_numext.setText("");
            txt_numint.setText("");
        } catch (Exception e) {
        }
        finally{
            System.gc();
        }
    }
    
    
    /*
    public void actionPerformed(ActionEvent ae) {
        if(ae.getActionCommand().equals("sel_pais")){     select_pais();   }
        if(ae.getActionCommand().equals("sel_estado")){   select_estado(); }
        if(ae.getActionCommand().equals("sel_ciudad")){   select_ciudad(); }
        if(ae.getActionCommand().equals("sel_colonia")){   select_colonia(); }
        
    }*/
    public void action(){
        sel_pais.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {select_pais();}});
        sel_estado.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {select_estado();}});
        sel_ciudad.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {select_ciudad();}});
        sel_colonia.addActionListener( new ActionListener(){public void actionPerformed(ActionEvent e) {select_colonia();}});
        
    }
    public void select_pais(){
        try {
            if(sel_pais.getSelectionModel().isSelectionEmpty()){
                //mensaje de error
            }else{
                pais=(Pais)sel_pais.getSelectedItem();
                estados=query.estados(pais);
                if(estados == null || estados.isEmpty()){
                    sel_estado.setModel(new DefaultListModel());
                }else{
                    sel_estado.setModel(new DefaultListModel(estados.toArray()));
                    
                }
                
                sel_ciudad.setModel(new DefaultListModel());
                sel_colonia.setModel(new DefaultListModel());
                sel_estado.setSelectedIndex(-1);
                sel_ciudad.setSelectedIndex(-1);
                sel_colonia.setSelectedIndex(-1);
            }
        } catch (Exception e) {
        }finally{
            System.gc();
        }
    }
    public void select_estado(){
        try {
            if(sel_estado.getSelectionModel().isSelectionEmpty()){
            
            }else{
                estado = (Estado)sel_estado.getSelectedItem();
                poblaciones = query.poblacion(estado);
                if(poblaciones == null || poblaciones.isEmpty()){
                        sel_ciudad.setModel(new DefaultListModel());
                }else{
                        sel_ciudad.setModel(new DefaultListModel(poblaciones.toArray()));
                }
                
                sel_colonia.setModel(new DefaultListModel());
                sel_ciudad.setSelectedIndex(-1);
                sel_colonia.setSelectedIndex(-1);
            }
        } catch (Exception e) {
        }finally{
            System.gc();
        }
    }
    public void select_ciudad(){
        try {
            if(sel_ciudad.getSelectionModel().isSelectionEmpty()){
            
            }else{
                poblacion = (Poblacion) sel_ciudad.getSelectedItem();
                colonias = query.colonia(poblacion);
                if(colonias == null || colonias.isEmpty()){
                        sel_colonia.setModel(new DefaultListModel());
                }else{
                        sel_colonia.setModel(new DefaultListModel(colonias.toArray()));
                }
                sel_colonia.setSelectedIndex(-1);
            }
        } catch (Exception e) {
        }finally{
            System.gc();
        }
    }
    public void select_colonia(){
        try {
            if(sel_colonia.getSelectionModel().isSelectionEmpty()){
            
            }else{
                colonia = (Colonia)sel_colonia.getSelectedItem();
                txt_codpostal.setText(""+colonia.getcodigoPostal());
            }
            
        } catch (Exception e) {
        }finally{
            System.gc();
        }
    }
    
    
    
    public Column getColumn(){
        try {
            if(col_pais != null){
                 return col_supreme;
            }
        
        } catch (Exception e) {
            return null;
        }
        return null;
       
    }
    
    
    //update
    
    public void getDireccion(int direccionId){
        List<Direccion> lista;
        try {
            lista = query.getDireccion(direccionId);
            if(lista == null || lista.isEmpty())
                    return;
            direccion = lista.get(0);
            if(direccion == null)
                    return;
            sel_pais.setSelectedItem(new Pais(direccion.getpaisId()));
            estados = query.estados((Pais)sel_pais.getSelectedItem());
            if(estados == null || estados.isEmpty())
                    return;
            sel_estado.setModel(new DefaultListModel(estados.toArray()));
            
            sel_estado.setSelectedItem(new Estado(direccion.getestadoId()));
            poblaciones = query.poblacion((Estado)sel_estado.getSelectedItem());
            if(poblaciones == null || poblaciones.isEmpty())
                    return;
            sel_ciudad.setModel(new DefaultListModel(poblaciones.toArray()));
            
            sel_ciudad.setSelectedItem(new Poblacion(direccion.getpoblacionId()));
            colonias = query.colonia((Poblacion)sel_ciudad.getSelectedItem());
            if(colonias == null || colonias.isEmpty())
                    return;
            sel_colonia.setModel(new DefaultListModel(colonias.toArray()));
            sel_colonia.setSelectedItem(new Colonia(direccion.getcoloniaId()));
            
            colonia = (Colonia)sel_colonia.getSelectedItem();
            
            txt_calle.setText(""+direccion.getcalle());
            txt_codpostal.setText(""+colonia.getcodigoPostal());
            txt_numext.setText(""+direccion.getnumero_exterior());
            txt_numint.setText(""+direccion.getnumero_interior());
        } catch (Exception e) {
        }
    
    }

    
    //Guardar
    
    public int pre_insert(int direccionId){
        Direccion d=new Direccion();
        try {
            d.setcalle(txt_calle.getText());
            d.setnumero_exterior(txt_numext.getText());
            d.setnumero_interior(txt_numint.getText());
            d.settipoDeVia("CA");
            d.setcoloniaId(((Colonia)sel_colonia.getSelectedItem()).getcoloniaId());
            if(direccionId <= 0){
                direccionId=query.insert(d);
            }else{
                d.setdireccionId(direccionId);
                direccionId=query.update(d);    
            }
            
        } catch (Exception e) {
            return 0;
        }
        return direccionId;
    }
    
    
    
    
    
}
